<?php

namespace JsonLowCode\UI;

use JsonLowCode\Schema;
use JsonLowCode\Traits\Events\HasModelValueEvent;
use JsonLowCode\Traits\Props\HasClearable;
use JsonLowCode\Traits\Props\HasDisabled;
use JsonLowCode\Traits\Props\HasModel;
use JsonLowCode\Traits\Props\HasSize;
use JsonLowCode\Traits\Props\HasValue;

class IconSelect extends Schema
{
    protected string $componentName = "IconSelect";

    use HasModel, HasValue, HasSize, HasDisabled, HasClearable;

    use HasModelValueEvent;

    /**
     * 未选中图标
     * @param string $emptyIcon
     * @return $this
     */
    public function emptyIcon(string $emptyIcon): static
    {
        return $this->prop('emptyIcon', $emptyIcon);
    }

    /**
     * 图标列表
     * @param string|array<int,string> $icons
     * @return $this
     */
    public function icons(string|array $icons = []): static
    {
        $this->prop('icons', $icons);
        return $this;
    }


    /**
     * 设置组件 inputClass 样式类名
     * @param string|array|null $class 类名
     * @return $this
     */
    public function inputClass(string|array $class = null): static
    {
        if ($class!=null){
            $oldClass = $this->prop['inputClass']??[];
            $this->prop('inputClass',array_merge($oldClass, is_array($class)?$class:[$class]));
        }else{
            $this->prop('inputClass',"");
        }
        return $this;
    }


    /**
     * 设置组件inputStyle样式
     * @param string|array|null $style 绑定数据变量 $:[数据源] 例如 $:model.a [数据源=>model自身数据和datasource里的数据]
     * @return $this
     */
    public function inputStyle(string|array $style = null): static
    {
        if ($style!=null){
            $this->prop('inputStyle',$style);
        }
        return $this;
    }

    /**
     * 颜色改变时的回调
     * @param string $event (value: string) => void
     * @return $this
     */
    public function onUpdateValue(string $event = "(value) => {}"): static
    {
        return $this->events('onUpdate:value', $event);
    }

    /**
     * 颜色改变时的回调
     * @param string $event (value: string) => void
     * @return $this
     */
    public function onChange(string $event = "(value) => {}"): static
    {
        return $this->events('onChange', $event);
    }
}
